package com.qf.data.user.dto;

import com.ken.mybatis.annotation.ToMore;
import com.qf.data.user.entity.SysPower;
import com.qf.data.user.entity.SysUser;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * 用户信息 以及 用户下的权限信息的dto
 * author Ken
 * create_time 2022/9/1
 */
@Data
@ToString(callSuper = true)
@Slf4j
public class SysUserPowersDto extends SysUser {

    /**
     * 权限列表
     */
    @ToMore(type = SysPower.class)
    private List<SysPower> powers;

    /**
     * 子类重写校验权限的方法
     * @param requestUrl
     * @return
     */
    @Override
    public boolean hasPowers(String requestUrl) {
        log.debug("[sys power] 后台系统的权限校验 - {}", requestUrl);
        AntPathMatcher antPathMatcher = new AntPathMatcher();
        if (CollectionUtils.isEmpty(powers)){
            return false;
        }

        for (SysPower power : powers) {
            if (!StringUtils.isEmpty(power.getPowerRes())
                    && antPathMatcher.match(power.getPowerRes(), requestUrl)) {
                log.debug("[sys power] 权限校验通过 - 拥有权限：{} 请求的资源：{}", power.getPowerRes(), requestUrl);
                return true;
            }
        }
        log.debug("[sys power] 权限校验失败", requestUrl);
        return false;
    }
}
